// 基础配置
const config = {
  baseSize: 14, // 基础字体大小
  minSize: 14, // 最小字体大小
  maxSize: 20, // 最大字体大小
  targetWidth: 1920, // 目标设计稿宽度
}

function setRem(): void {
  // 获取视口宽度
  const viewportWidth =
    window.innerWidth || document.documentElement.clientWidth

  // 计算缩放比例
  const scale = viewportWidth / config.targetWidth

  // 计算字体大小
  let fontSize = config.baseSize * scale

  // 限制字体大小范围
  fontSize = Math.max(config.minSize, Math.min(config.maxSize, fontSize))

  // 设置根元素字体大小
  document.documentElement.style.setProperty(
    '--global-font-size',
    `${fontSize}px`
  )
}

// 防抖函数
function debounce<T extends (...args: any[]) => any>(
  func: T,
  wait: number
): (...args: Parameters<T>) => void {
  let timeout: ReturnType<typeof setTimeout> | null = null

  return function (...args: Parameters<T>): void {
    if (timeout !== null) {
      clearTimeout(timeout)
    }
    timeout = setTimeout(() => {
      func.apply(this, args)
    }, wait)
  }
}

// 创建防抖版本的 setRem
const debouncedSetRem = debounce(setRem, 150)

// 初始化
function initRem() {
  // 立即执行一次
  setRem()

  // 监听窗口大小变化
  window.addEventListener('resize', debouncedSetRem)
}

// 导出初始化函数
export { initRem }
